﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller; // Brug vores class library "Controller"
using Interfaces; // Brug vores class library "Interfaces"

namespace Sorts_F1
{
    public partial class FrmStart : Form
    {
        // Attribut
        ClsSystemController systemController;

        public FrmStart()
        {
            InitializeComponent();
            systemController = new ClsSystemController(); // Instansiere controlleren
            this.MinimumSize = this.MaximumSize = this.Size; // Sørg for at formen altid er den nuværende størrelse
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            FrmVisLogin frmLogin = new FrmVisLogin(systemController); // Instansiere ny form af FrmVisLogin og sender controlleren med
            frmLogin.ShowDialog(); /* ShowDialog gør at, du kan kun arbejde i den nye instasieret form og ikke de 
                                 andre eventuelt bagvedliggende, indtil den nye form bliver lukket igen*/

            try
            {
                // Hvis det aktuelle medlemsinterfaceobjekt ikke er tomt, og det ikke har medlemsnummer 0 (admin)
                if (systemController.AktueltMedlem != null && systemController.AktueltMedlem.MedlemsNummer != 0)
                {
                    // Og hvis dette aktuelle medlem har betalt
                    if (systemController.AktueltMedlem.Betalt == true)
                    {
                        // Tilstandsstyring
                        btnStemme.Visible = true;
                    }

                    // Hvis det aktuelle medlem ikke har betalt
                    else
                    {
                        // Tilstandsstyring
                        lbBetaling.Visible = true;
                    }

                    // Tilstandsstyring
                    btnMinProfil.Visible = true;
                    btnLogin.Visible = false;
                    btnAdmin.Visible = false;
                    btnLogAf.Visible = true;
                }

                // Hvis det aktuelle medlemsinterfaceobjekt's medlemsnummer er 0, så er det admin
                else if (systemController.AktueltMedlem.MedlemsNummer == 0)
                {
                    // Tilstandsstyring
                    btnAdmin.Visible = true;
                    btnMinProfil.Visible = false;
                    btnStemme.Visible = false;
                    btnLogin.Visible = false;
                    btnLogAf.Visible = true;
                }
            }

            catch
            {


            }
        }

        private void btnRegler_Click(object sender, EventArgs e)
        {
            FrmVisRegler frmRegler = new FrmVisRegler(systemController); // Instansiere ny form af FrmVisRegler og sender controlleren med
            frmRegler.ShowDialog(); /* ShowDialog gør at, du kan kun arbejde i den nye instasieret form og ikke de 
                                 andre eventuelt bagvedliggende, indtil den nye form bliver lukket igen*/
        }

        private void btnRegistrer_Click(object sender, EventArgs e)
        {
            FrmOpretMedlem frmRegistrer = new FrmOpretMedlem(systemController); // Instansiere ny form af FrmOpretMedlem og sender controlleren med
            frmRegistrer.ShowDialog(); /* ShowDialog gør at, du kan kun arbejde i den nye instasieret form og ikke de 
                                 andre eventuelt bagvedliggende, indtil den nye form bliver lukket igen*/
           
            OpdaterFormen(); // Opdatere FrmStart når FrmOpretMedlem lukkes
        }

        private void FrmStart_Load(object sender, EventArgs e)
        {
            OpdaterFormen(); // Opdatere formen når den loades
        }

        private void btnAdmin_Click(object sender, EventArgs e)
        {
            FrmVisAdmin frmadmin = new FrmVisAdmin(systemController); // Instansiere ny form af FrmVisAdmin og sender controlleren med
            frmadmin.ShowDialog(); /* ShowDialog gør at, du kan kun arbejde i den nye instasieret form og ikke de 
                                 andre eventuelt bagvedliggende, indtil den nye form bliver lukket igen*/
           
            OpdaterFormen(); // Opdatere FrmStart når FrmVisAdmin lukkes
        }

        private void btnStemme_Click(object sender, EventArgs e)
        {
            FrmStemme frmStem = new FrmStemme(systemController); // Instansiere ny form af FrmStemme og sender controlleren med
            frmStem.ShowDialog(); /* ShowDialog gør at, du kan kun arbejde i den nye instasieret form og ikke de 
                                 andre eventuelt bagvedliggende, indtil den nye form bliver lukket igen*/
            
            OpdaterFormen(); // Opdatere FrmStart når FrmStemme lukkes
        }

        private void btnAfslut_Click(object sender, EventArgs e)
        {
            this.Close(); // Lukker formen
        }

        private void btnLogAf_Click(object sender, EventArgs e)
        {
            systemController.MedlemLogaf(); // Brug metoden til at lukke af hvor det aktuelle medlem bliver sat til null

            MessageBox.Show("Du er nu logget af");

            // Tilstandsstyring
            btnLogin.Visible = true;
            btnMinProfil.Visible = false;
            btnAdmin.Visible = false;
            btnStemme.Visible = false;
            btnLogAf.Visible = false;
            
            lbBetaling.Visible = false;
        }

        private void btnMinProfil_Click(object sender, EventArgs e)
        {
            FrmVisMinProfil frmProfil = new FrmVisMinProfil(systemController); // Instansiere ny form af FrmVisMinProfil og sender controlleren med
            frmProfil.ShowDialog(); /* ShowDialog gør at, du kan kun arbejde i den nye instasieret form og ikke de 
                                 andre eventuelt bagvedliggende, indtil den nye form bliver lukket igen*/
            
            OpdaterFormen(); // Opdatere FrmStart når FrmVisMinProfil lukkes
        }

        private void btnNyheder_Click(object sender, EventArgs e)
        {
            FrmVisNyheder frmNyheder = new FrmVisNyheder(systemController); // Instansiere ny form af FrmVisNyheder og sender controlleren med
            frmNyheder.ShowDialog(); /* ShowDialog gør at, du kan kun arbejde i den nye instasieret form og ikke de 
                                 andre eventuelt bagvedliggende, indtil den nye form bliver lukket igen*/
        }

        public void OpdaterFormen()
        {
            lvMedlemStilling.Columns[0].ListView.Sorting = SortOrder.Descending; // Sorter første colonne (0) alfabetisk.
            lvMedlemStilling.Items.Clear();

            // Indlæser alt data fra databasen til brug i programmet
            systemController.OpdaterTeamsFraDB();
            systemController.OpdaterKoerereFraDB();
            systemController.OpdaterMedlemFraDB();
            systemController.OpdaterGrandPrixFraDB();
            systemController.OpdaterPostByFraDB();
            systemController.DownloadMedlemsSamledePointFraDB();

            foreach (var item in systemController.VisMedlemmer())
            {
                ListViewItem lvi = new ListViewItem(); // Instansiere nyt listview

                /* Den følgende kode bruges til at sorterer listviewet. Dette er en hurtig og effektiv måde at
                sorterer colonnen på. En anden måde ville være, at oprette en listview IComparer class. */

                if (item.TotalPoint < 10)
                {
                    if (item.MedlemsNummer != 0) // Skal kun se medlemmer der ikke er admin
                    {

                        lvi.SubItems[0].Text = "000" + item.TotalPoint.ToString(); // Hvis TotalPoint fx er 1, bliver det til 0001 (i den skjulte colonne).

                    }
                }

                else if (item.TotalPoint < 100)
                {
                    if (item.MedlemsNummer != 0) // Skal kun se medlemmer der ikke er admin
                    {
                        lvi.SubItems[0].Text = "00" + item.TotalPoint.ToString(); // Hvis TotalPoint fx er 10, bliver det til 0010 (i den skjulte colonne).
                    }
                }

                else
                {
                    if (item.MedlemsNummer != 0) // Skal kun se medlemmer der ikke er admin
                    {
                        lvi.SubItems[0].Text = "0" + item.TotalPoint.ToString(); // Hvis TotalPoint fx er 100, bliver det til 0100 (i den skjulte colonne).
                    }
                }

                if (item.MedlemsNummer != 0) // Skal kun se medlemmer der ikke er admin
                {
                    lvi.SubItems.Add(item.Navn);
                    lvi.SubItems.Add(item.TotalPoint.ToString());
                    lvMedlemStilling.Items.Add(lvi); // Adderer subitems til listviewet
                }
            }

            
            try
            {
                // Indlæsning af info om næste løb på forsiden
                txtNaesteLoeb.Text = "Næste løb køres i: " + systemController.VisNaesteGrandPrix().Land + Environment.NewLine + Environment.NewLine +
                "Banens navn er: " + Environment.NewLine + systemController.VisNaesteGrandPrix().BaneNavn + Environment.NewLine
                + Environment.NewLine + "Løbet køres den: " + Environment.NewLine + systemController.VisNaesteGrandPrix().GrandPrixDatoTid.ToShortDateString() + Environment.NewLine
                + Environment.NewLine + "Klokken: " + Environment.NewLine + systemController.VisNaesteGrandPrix().GrandPrixDatoTid.ToShortTimeString() + Environment.NewLine
                + Environment.NewLine + "Jokeren til næste løb: " + Environment.NewLine + systemController.VisNaesteGrandPrix().Joker.Navn;
            }

            catch
            {
                txtNaesteLoeb.Clear();
            }
        }
    }
}